论文链接:https://arxiv.org/pdf/2408.00714
代码链接:https://github.com/facebookresearch/segment-anything
摘要
我们提出了 Segment Anything Model 2 (SAM 2),这是一个用于解决图像和视频中可提示视觉分割问题的基础模型。我们构建了一个数据引擎,通过用户交互来改进模型和数据,从而收集了迄今为止最大的视频分割数据集。我们的模型是一个简单的 Transformer 架构,采用流式内存进行实时视频处理。在我们的数据集上训练的 SAM 2 在各种任务中都表现出色。在视频分割方面,我们观察到更高的准确率,并且交互次数比以往的方法减少了 3 倍。在图像分割方面,我们的模型比 Segment Anything Model (SAM) 更准确,速度也快了 6 倍。我们相信,我们的数据、模型和见解将成为视频分割及相关感知任务领域的一个重要里程碑。我们将发布我们的主要模型、数据集以及模型训练代码和演示程序。
1.介绍

Segment Anything (SA) 提出了一种用于图像中可提示分割的基础模型。然而,图像只是真实世界的静态快照,其中视觉区域可能呈现复杂的运动。随着多媒体内容的快速增长,很大一部分内容,特别是视频数据,现在都以时间维度进行记录。AR/VR、机器人、自动驾驶汽车和视频编辑等诸多重要应用需要超越图像级分割的时间定位。我们认为,一个通用的视觉分割系统应该同时适用于图像和视频。
视频分割旨在确定实体的时空范围,这带来了图像分割所不具备的独特挑战。由于运动、变形、遮挡、光照变化和其他因素,实体的外观会发生显著变化。此外,由于摄像机运动、模糊和分辨率较低,视频的质量通常低于图像。高效处理大量帧也是一项关键挑战。虽然 SA 已成功解决图像分割问题,但现有的视频分割模型和数据集在“分割视频中的任何元素”方面仍存在不足。
我们提出了 Segment Anything Model 2 (SAM 2),这是一个用于视频和图像分割的统一模型(我们将图像视为单帧视频)。我们的工作包括任务、模型和数据集(见图 1)。
我们专注于 Promptable Visual Segmentation (PVS) 任务,该任务将图像分割推广到视频领域。该任务以视频任意帧上的点、框或掩码作为输入,以定义感兴趣的片段,并预测该片段的时空掩码(即“掩码单元”)。一旦预测出掩码单元,即可通过在后续帧中提供提示来迭代地对其进行优化。
我们的模型(§4)能够生成目标对象的分割掩码,既适用于单幅图像,也适用于跨视频帧。SAM 2 配备了一个记忆模块,用于存储目标对象及其先前交互的信息,这使得它能够在整个视频中生成掩码预测,并能根据存储的先前帧中目标对象的上下文信息有效地进行校正。我们的流式架构是 SAM 在视频领域的自然推广,它一次处理一帧视频,并配备了一个记忆注意力模块来关注目标对象的先前记忆。当应用于图像时,记忆为空,模型的行为与 SAM 相同。
我们采用数据引擎(§5)生成训练数据,该引擎通过循环使用我们的模型和标注者,交互式地标注新的、具有挑战性的数据。与大多数现有的视频分割数据集不同,我们的数据引擎不局限于特定类别的对象,而是旨在提供用于分割任何具有有效边界的对象(包括部分和子部分)的训练数据。与现有的模型辅助方法相比,我们的数据引擎在循环中使用 SAM 2,速度提高了 8.4 倍,且质量相当。我们最终的“任意视频分割”(SA-V)数据集(§5.2)包含 50.9 万个视频的 3550 万个掩码,比任何现有的视频分割数据集的掩码数量多 53 倍。SA-V 数据集具有挑战性,其中包含许多在视频中会被遮挡并重新出现的小对象和部分。我们的 SA-V 数据集具有地域多样性,并且对 SAM 2 的公平性评估表明,基于感知性别的视频分割性能差异很小,我们评估的三个感知年龄组之间的差异也很小。
我们的实验(§6)表明,SAM 2 显著提升了视频分割体验。与以往方法相比,SAM 2 能够在减少 3 倍交互次数的同时,实现更高的分割精度。此外,在多种评估设置下,SAM 2 在已建立的视频对象分割基准测试中均优于以往方法,并且在图像分割基准测试中,其性能优于 SAM,速度提升了 6 倍。通过众多零样本基准测试(包括 17 个视频分割基准测试和 37 个单图像分割基准测试),我们验证了 SAM 2 在各种视频和图像分布上的有效性。
我们将以宽松的开放许可发布我们的作品,包括 SA-V 数据集(CC BY 4.0)、SAM 2 模型检查点、训练代码(Apache 2.0)以及我们的交互式在线演示代码(Apache 2.0)。
2.Related work
Image segmentation。Segment Anything 引入了一种可提示的图像分割任务,其目标是根据输入提示(例如指向目标对象的边界框或点)输出有效的分割掩码。SAM 在 SA-1B 数据集上训练,支持零样本分割,因此被广泛应用于各种应用场景。近期研究扩展了 SAM,例如引入高质量输出 token 以在细粒度掩码上进行训练,或提高 SAM 的效率。更广泛地说,SAM 被应用于广泛的应用领域,包括医学成像、遥感和伪装目标检测。
Interactive Video Object Segmentation (iVOS)。交互式视频对象分割已成为一项至关重要的任务,它需要在用户引导下高效地获取视频中的对象分割结果(掩码),用户引导通常以涂鸦、点击或边界框的形式呈现。一些早期方法采用基于图的优化方法来指导分割标注过程。而较新的方法则通常采用模块化设计,将用户输入转换为单帧上的掩码表示,然后将其传播到其他帧。
Video Object Segmentation (VOS)。VOS任务以第一帧中的目标掩码作为输入,需要在整个视频过程中对其进行精确跟踪。由于输入掩码可以被视为仅在第一帧中可用的目标监督信号,因此该任务被称为“半监督VOS”。该任务因其在视频编辑和机器人等应用中的重要性而备受关注。
早期基于深度学习的方法通常使用在线微调,对第一帧视频或所有帧进行微调,以使模型适应目标对象。离线训练的模型可以实现更快的推理速度,这些模型可以仅基于第一帧进行训练,也可以同时整合前一帧。这种多帧训练方法已扩展到所有帧,并应用于循环神经网络(RNN)和Transformer模型。
半监督视觉目标识别(VOS)可以看作是我们提出的可提示视觉分割(PVS)任务的一个特例,它仅在第一帧视频中提供一个掩码提示。值得注意的是,在 VOS 中,标注第一帧所需的高质量目标掩码在实际应用中具有挑战性,并且非常耗时。
Video segmentation datasets。为了支持 VOS 任务,人们提出了许多数据集。早期的 VOS 数据集,例如DAVIS,包含高质量的标注,但其规模限制了基于深度学习的方法。YouTube-VOS是第一个大规模的VOS数据集。随着算法的改进和基准测试性能的趋于饱和,研究人员开始着手增加 VOS 任务的难度,例如特别关注遮挡、长视频、极端变换、物体多样性或场景多样性。
我们发现,当前的视频分割数据集覆盖范围不足,无法实现“分割视频中的任何对象”。它们的标注通常只涵盖整个对象(而非部分),而且数据集往往围绕特定的对象类别展开,例如人、车辆和动物。与这些数据集相比,我们发布的 SA-V 数据集不仅关注整个对象,还广泛覆盖对象的各个部分,并且包含的掩码数量级以上。
3.Task: promptable visual segmentation

我们的 PVS 任务允许在视频的任意帧上向模型提供提示。提示可以是肯定/否定点击、方框或掩码,用于定义待分割对象或优化模型预测的对象。为了提供交互式体验,模型在收到特定帧的提示后,应立即返回该帧上对象的有效分割掩码。在收到初始提示(无论是在同一帧还是不同帧上)后,模型应将这些提示传播到整个视频,从而获取对象的掩码片段,并在每个视频帧上定位目标的分割掩码。可以向模型提供任意帧的额外提示,以优化整个视频的分割结果(图 2 所示示例)。有关任务的详细信息,请参见§B。
SAM 2(§4)被用作 PVS 任务的数据收集工具,用于构建我们的 SA-V 数据集(§5)。我们通过模拟跨多帧的交互式视频分割场景来评估模型(§6),在传统的半监督 VOS 设置下(其中标注仅限于第一帧),并在 SA 基准测试上进行图像分割。
4.Model

SAM 2(图 3)可以看作是 SAM 在视频(和图像)领域的推广,它利用单个帧上的点、框和掩码提示来定义待分割对象的时空范围。在空间上,该模型的行为与 SAM 类似。一个可提示的轻量级 mask 解码器接收图像嵌入和提示(如果有),并输出该帧的分割掩码。可以迭代地在帧上添加提示以细化掩码。
SAM 2 解码器使用的帧嵌入并非直接来自图像编码器,而是基于对过去预测和提示帧的记忆进行条件化处理。提示帧也可能来自相对于当前帧的“未来”。帧记忆由记忆编码器基于当前预测创建,并存储在记忆库中以供后续帧使用。记忆注意力操作从图像编码器获取每帧的嵌入,并根据记忆库中的数据进行条件化处理,然后 mask 解码器将其用于形成预测。
下面我们将介绍各个组成部分和训练,并在附录 D 中提供更多详细信息。
Image encoder。为了实时处理任意长度的视频,我们采用流式传输的方式,即在视频帧可用时立即进行处理。图像编码器在整个交互过程中仅运行一次,其作用是提供代表每一帧的无条件 token(特征嵌入)。我们使用预训练的基于 MAE 算法的 Hiera 图像编码器,该编码器采用分层结构,允许我们在解码过程中使用多尺度特征。
Memory attention。记忆注意力机制的作用是将当前帧的特征与过去帧的特征和预测以及任何新的提示联系起来。我们堆叠 L 个 Transformer 模块,第一个模块以当前帧的图像编码作为输入。每个模块执行自注意力,然后对存储在记忆库(见下文)中的(有提示/无提示的)帧和对象指针(见下文)进行交叉注意力,最后执行多层感知器(MLP)。我们使用基本的注意力操作来实现自注意力和交叉注意力,从而能够受益于高效注意力核的最新进展。
Prompt encoder and mask decoder。我们的提示编码器与 SAM 的相同,可以通过点击(正向或负向)、方框或掩码来提示,从而定义给定帧中对象的范围。稀疏提示由位置编码与每种提示类型的学习嵌入相加表示,而 mask 则使用卷积进行嵌入,并与帧嵌入相加。
我们的解码器设计基本遵循SAM算法。我们堆叠“双向”Transformer模块,用于更新提示和帧嵌入。与SAM算法类似,对于可能存在多个兼容目标掩码的模糊提示(例如,单击),我们会预测多个掩码。这种设计对于确保模型输出有效的掩码至关重要。在视频中,由于歧义可能跨越多个视频帧,模型会在每一帧上预测多个掩码。如果没有后续提示消除歧义,模型只会传播当前帧中预测IoU最高的掩码。
与 SAM 任务中给定肯定提示总能找到有效分割对象不同,PVS任务中某些帧可能不存在有效对象(例如,由于遮挡)。为了支持这种新的输出模式,我们添加了一个额外的预测头,用于预测当前帧中是否存在目标对象。另一个创新之处在于,我们引入了来自分层图像编码器的 skip 连接(绕过记忆注意力机制),以便整合高分辨率嵌入进行 mask 解码(参见§D)。
Memory encoder。记忆编码器通过使用卷积模块对输出掩码进行下采样,并将其与来自图像编码器的无条件帧嵌入逐元素求和(图 3 中未显示)来生成记忆,然后通过轻量级卷积层融合信息。
Memory bank。记忆库通过维护一个最多包含 N 帧最近帧的 FIFO 记忆队列来保存视频中目标对象的历史预测信息,并通过一个最多包含 M 帧提示信息的 FIFO 队列来存储提示信息。例如,在 VOS 任务中,初始掩码是唯一的提示,记忆库始终保留第一帧的记忆以及最多 N 帧最近(未提示)帧的记忆。这两组记忆都以空间特征图的形式存储。
除了空间记忆之外,我们还存储了一个对象指针列表,作为轻量级向量,用于存储待分割对象的高级语义信息,该列表基于每一帧的 mask 解码器输出标记。我们的记忆注意力机制会同时关注空间记忆特征和这些对象指针。
我们将时间位置信息嵌入到最近 N 帧的记忆中,使模型能够表示短期物体运动,但不会嵌入到提示帧的记忆中,因为提示帧的训练信号更稀疏,更难推广到推理设置中,因为提示帧可能来自与训练期间所见的时间范围截然不同的时间范围。
Training。该模型使用图像和视频数据进行联合训练。与之前的工作类似,我们模拟了模型的交互式提示。我们对 8 帧序列进行采样,并随机选择最多 2 帧进行提示,同时以一定的概率接收校正点击。这些校正点击的采样基于训练期间使用的真实掩码和模型预测结果。训练任务是按顺序(且“交互式”)预测真实掩码。模型的初始提示可以是:概率为 0.5 的真实掩码;概率为 0.25 的从真实掩码中采样得到的正向点击;或概率为 0.25 的边界框输入。更多细节请参见 §D。
5.Data
为了开发“视频中任意对象分割”的能力,我们构建了一个数据引擎,用于收集庞大且多样化的视频分割数据集。我们采用了一种交互式模型在环架构,并结合了人工标注。与 Kirillov et al. (2023) 的研究类似,我们不对标注的掩码单元施加语义约束,而是同时关注完整对象(例如,一个人)和局部对象(例如,人的帽子)。我们的数据引擎经历了三个阶段,每个阶段都根据模型为标注者提供的辅助程度进行分类。接下来,我们将分别描述数据引擎的每个阶段以及我们的 SA-V 数据集。